﻿using UnityEngine;
using System.Collections.Generic;
using TTGame;

/*
 * PuppetProperty
 * puppet的属性类
 *
 * 将各种人物属性从Puppet中提取出来了。
 * 属性可以由服务器进行修改。
 *
 * 坐标、面向这种不属于属性，属于用于计算的临时变量。
 * 阵营属于属性。
 *
 *
 *
 * 依赖：
 * Puppet
 *
 * ！不写重复代码！
 * @author TTun
 * @date 7/12/2017 8:29:23 PM
 */
namespace TTGameEngine {
public enum PuppetIntPropID {
//***服务器下发属性***//
    //int属性
    Prop_id,       //PropID，属性表中每个英雄每个等级有着不同的ID。类似7060187的ID
    Prop_hero_id,  //prefabID，不同的prefab对应不同的ID。类似7050003的ID！目前以这个ID为唯一标识！
    Prop_lv,
    Prop_exp,   //升级经验
    Prop_hp,    //最大血量
    Prop_att,   //攻击
    Prop_def,   //防御
    Prop_move,   //移动速度
    Prop_anger,  //每次被打获得怒气
    Prop_angerMax,//怒气上限
    Prop_seatPrior, //站位优先级 //英雄的SeatPrior数字小的优先。怪物没有SeatPrior，以最大值计算。
//******以下属性不是由服务器下发，是本地使用的属性**************//
    Prop_curHp,         //血量
    Prop_curAnger,      //当前怒气
    Prop_grade,         //晋升等级

    //！！！如果要添加 PropID，需要重新刷新Prefab，因为Prop数组已经保存在prefab文件里了。
    PropCount,
}

public enum PuppetFloatPropID {
//***服务器下发属性***//
    //float属性
    Prop_atkRate,   //攻速（目前当共CD用）
//********************//
    PropCount,
}

public enum PuppetStrPropID {
    HeadIcon,
    HeroType,
    PropCount
}
public class PuppetProperty : MonoBehaviour {
    [ReadOnly]
    public PuppetCampID myCampID;//初始阵营

    [HideInInspector]
    public int level; //当前等级
    [HideInInspector]
    public int starLevel;//当前星级

    //属性表
    public int[] m_intProps = new int[(int)PuppetIntPropID.PropCount];
    public float[] m_floatProps = new float[(int)PuppetFloatPropID.PropCount];
    public string[] m_strProps = new string[(int)PuppetStrPropID.PropCount];

    public void SetIntProp(PuppetIntPropID propID, int value) {
        if((int)propID >= m_intProps.Length) {
            DebugUtil.LogErrorFormat("超过Int属性数组长度 propID[{0}:{1}] propsLen:{2}", propID.ToString(), (int)propID, m_intProps.Length);
        }
        m_intProps[(int)propID] = value;
    }

    public int GetIntProp(PuppetIntPropID propID) {
        if((int)propID >= m_intProps.Length) {
            DebugUtil.LogErrorFormat("超过Int属性数组长度 propID[{0}:{1}] propsLen:{2}", propID.ToString(), (int)propID, m_intProps.Length);
        }
        return m_intProps[(int)propID];
    }

    public void SetFloatProp(PuppetFloatPropID propID, float value) {
        m_floatProps[(int)propID] = value;
    }

    public float GetFloatProp(PuppetFloatPropID propID) {
        if((int)propID >= m_floatProps.Length) {
            DebugUtil.LogErrorFormat("超过Float属性数组长度 propID[{0}] propsLen:{1}", propID.ToString(), m_floatProps.Length);
        }
        return m_floatProps[(int)propID];
    }

    public void SetStrProp(PuppetStrPropID strPropID, string value) {
        m_strProps[(int)strPropID] = value;
    }

    public string GetStrProp(PuppetStrPropID propID) {
        if((int)propID >= m_strProps.Length) {
            DebugUtil.LogErrorFormat("超过Str属性数组长度 propID[{0}] propsLen:{1}", propID.ToString(), m_strProps.Length);
        }
        return m_strProps[(int)propID];
    }

}
}